[INV-BACKEND-030] Создать метод rpc mutateBalances(FIFO_DeductRequest)

Реализация транзакционного gRPC-метода списания сырья и зачисления порций

Author

Services Task & Simulation Framework Documentation

Published

July 13, 2026

NoteКраткая карточка задачи

  • Инструкция по шагам:
    1. Принять gRPC-запрос мутации остатков. Открыть ACID-транзакцию в PostgreSQL Fridge DB.
    2. На Шаге 6: Провести скоринг параметра space_type.
    3. Если space_type == "HOME" (Шаг 7а): Запустить мягкое каскадное FIFO-списание граммов/литров сырья из таблицы fridge_inventory (сортировка по created_at ASC). В случае физической нехватки веса продукта разрешить уход текущего остатка партии в отрицательное значение (знак минус в БД), фиксируя теневую недостачу.
    4. Если space_type == "OFFICE" (Шаг 7б): Проверить 100% наличие требуемых объемов еды на полках. Если вес хотя бы одной позиции в БД меньше запрашиваемого расхода — выполнить ROLLBACK транзакции и вернуть в cook-service gRPC-ошибку уровня приложения INSUFFICIENT_FUNDS.
    5. На Шаге 8: В рамках той же открытой SQL-транзакции выполнить INSERT новой порционной записи готового блюда в таблицу fridge_inventory (для последующего частичного “откусывания” или потребления пользователями) и залогировать факт в cooking_history. Зафиксировать транзакцию (COMMIT) и вернуть успешный gRPC-статус.